﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Seguridad.ControlExeption;
using Crosland.Automotriz.Logic;

namespace Crosland.Automotriz.Web.Requerimiento
{
    public partial class wFrmRequerimientoActualizar : System.Web.UI.Page
    {

        private clsT_Log_RequerimientoLogic t_log_requerimientoLogic = null;
        private T_LOG_REQUERIMIETO t_log_requerimiento = null;
        private static String strOperacion = "";
        private static int id_estdo = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {



                this.ListaDatoCombos();
                this.ValidaOperacion();
            }

        }

        private void ListaDatosModificar()
        {

            t_log_requerimientoLogic = new clsT_Log_RequerimientoLogic();
            t_log_requerimiento = new T_LOG_REQUERIMIETO();
            List<T_LOG_REQUERIMIETO> l = t_log_requerimientoLogic.ListaPorNroRequerimiento(int.Parse(Session["NroRequerimiento"].ToString()));
            cboArea.Value = l[0].ID_AREA == null ? "0" : l[0].ID_AREA.ToString();
            cboTipo.Value = l[0].ID_TIPO_REQUERIMIENTO == null ? "0" : l[0].ID_TIPO_REQUERIMIENTO.ToString();
            cboTipoProceso.Value = l[0].ID_TIPO_PROCESO == null ? "0" : l[0].ID_TIPO_PROCESO.ToString();
            txtDescripcion.Text = l[0].DESCRIPCION;
            dteFecha.Date = l[0].FECHA_REGISTRO;
            id_estdo = l[0].ID_ESTADO;


        }

        private void ListaDatoCombos()
        {

            t_log_requerimientoLogic = new clsT_Log_RequerimientoLogic();
            cboArea.DataSource = t_log_requerimientoLogic.ListaTipos("T_LOG_REQUERIMIENTO_TIPO_AREA");
            cboArea.TextField = "Descripcion";
            cboArea.ValueField = "Id";
            cboArea.DataBind();

            cboTipo.DataSource = t_log_requerimientoLogic.ListaTipos("T_LOG_REQUERIMIENTO_TIPO_REQ");
            cboTipo.TextField = "Descripcion";
            cboTipo.ValueField = "Id";
            cboTipo.DataBind();

            cboTipoProceso.DataSource = t_log_requerimientoLogic.ListaTipos("T_LOG_REQUERIMIENTO_TIPO_PROCESO");
            cboTipoProceso.TextField = "Descripcion";
            cboTipoProceso.ValueField = "Id";
            cboTipoProceso.DataBind();



            cboResponsable.DataSource = t_log_requerimientoLogic.ListaTipos("T_LOG_REQUERIMIENTO_RESPONSABLE");
            cboResponsable.TextField = "Descripcion";
            cboResponsable.ValueField = "Id";
            cboResponsable.DataBind();
        }

        private void LimpiaControles()
        {
            dteFecha.Date = DateTime.Now;
            cboArea.SelectedIndex = 0;
            cboTipo.SelectedIndex = 0;
            cboTipoProceso.SelectedIndex = 0;
            txtDescripcion.Text = String.Empty;
        }

        private void ValidaOperacion()
        {
            try
            {
                this.ListaDatoCombos();

                if (strOperacion != null)
                {
                    strOperacion = Session["Operacion"].ToString();

                    if (strOperacion == "M")
                    {

                        this.ListaDatosModificar();
                    }
                    else if (strOperacion == "N")
                    {


                        this.LimpiaControles();

                    }
                    else
                    {

                        return;

                    }

                }

            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        private void Grabar()
        {
            try
            {
                t_log_requerimientoLogic = new clsT_Log_RequerimientoLogic();
                t_log_requerimiento = new T_LOG_REQUERIMIETO();
                int intUltimoNumero = t_log_requerimientoLogic.UltimoNumero() + 1;
                t_log_requerimiento.ID_LOG_REQUERIMIENTO = strOperacion == "M" ? int.Parse(Session["NroRequerimiento"].ToString()) : intUltimoNumero;
                t_log_requerimiento.FECHA_REGISTRO = dteFecha.Date;
                t_log_requerimiento.ID_AREA = int.Parse(cboArea.Value.ToString());
                t_log_requerimiento.ID_ESTADO = strOperacion == "M" ? id_estdo : 126;  //pendiente de atender por defecto
                t_log_requerimiento.ID_TIPO_PROCESO = int.Parse(cboTipoProceso.Value.ToString());
                t_log_requerimiento.ID_TIPO_REQUERIMIENTO = int.Parse(cboTipo.Value.ToString());
                t_log_requerimiento.ID_USUARIO = Session["User"].ToString();
                t_log_requerimiento.DESCRIPCION = txtDescripcion.Text;
                t_log_requerimiento.REQ_GENERAL = txtReqGeneral.Text;
                t_log_requerimiento.REQ_ESPECIFICO = txtReqEspecifico.Text;
                t_log_requerimiento.ID_RESPONSABLE_APROBACION = Convert.ToInt32(cboResponsable.Value);
                Boolean resultado = strOperacion == "M" ? t_log_requerimientoLogic.Modificar(t_log_requerimiento) : t_log_requerimientoLogic.Insertar(t_log_requerimiento);
                if (resultado)
                {


                    if (strOperacion == "N")
                    {

                        this.EnviaCorreo("Usted tiene un nuevo requerimieto que ha sido solicitado. ");

                    }
                    else
                    {

                        this.EnviaCorreo("Usted tiene un requerimiento que ha sido modificado por el solicitante. ");

                    }

                    lblmsj.Text = strOperacion == "M" ? "Se actualizó correctamente" : "Se grabó correctamente";
                    popupmsj.ShowOnPageLoad = true;
                }

            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Grabar");
                MensajesError(ex.Message, ex, "Grabar");
            }

        }


        private void EnviaCorreo(String strComentario)
        {

            clsUsuarioBL usu = new clsUsuarioBL();
            String strUsuario = Session["User"].ToString();
            List<Crosland.Automotriz.Core.V_Usuario> l = usu.listaUsuario(strUsuario);
            String strNombreSolicitante = l[0].DES_NOMBRE.ToString() + ' ' + l[0].DES_APELLIDOS.ToString();
            String strCorreoSolicitante = l[0].DES_EMAIL.ToString();
            String htmBody = String.Format(HtmlEmail.EnvioRequerimientos, cboResponsable.Text, strComentario,strNombreSolicitante, txtDescripcion.Text);

            String strEmailTo = cboResponsable.Value.ToString();
            String strEmailCC = strCorreoSolicitante;
            Tools.SendEmail(strEmailTo, strEmailCC, "Solicitud de requerimiento", htmBody);

        }


        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();

        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Session["Operacion"] = null;
            Session["NroRequerimiento"] = null;
            Response.Redirect("~/Requerimiento/wFrmRequerimiento.aspx?id=3");
        }
    }
}